package com.cherry.i18n.service;

import org.springframework.context.i18n.LocaleContextHolder;

import java.util.Locale;

/**
 * I18n Service
 *
 * @author sinbad.cheng
 * @since 2022-01-10
 */
public interface I18nService {

    /**
     * 获取国际化消息
     *
     * @param messageCode 消息编码
     * @return 国际化消息
     */
    default String getMessage(String messageCode) {
        Locale locale = LocaleContextHolder.getLocale();
        return getMessage(messageCode, locale, null, null);
    }

    /**
     * 获取国际化消息
     *
     * @param messageCode 消息编码
     * @param args        参数
     * @return 国际化消息
     */
    default String getMessage(String messageCode, Object[] args) {
        Locale locale = LocaleContextHolder.getLocale();
        return getMessage(messageCode, locale, args);
    }

    /**
     * 获取国际化消息
     *
     * @param messageCode    消息编码
     * @param defaultMessage 默认消息
     * @return 国际化消息
     */
    default String getMessage(String messageCode, String defaultMessage) {
        return getMessage(messageCode, defaultMessage, null);
    }

    /**
     * 获取国际化消息
     *
     * @param messageCode    消息编码
     * @param defaultMessage 默认消息
     * @param args           参数
     * @return 国际化消息
     */
    default String getMessage(String messageCode, String defaultMessage, Object[] args) {
        Locale locale = LocaleContextHolder.getLocale();
        return getMessage(messageCode, locale, defaultMessage, args);
    }

    /**
     * 获取国际化消息
     *
     * @param messageCode    消息编码
     * @param locale         区域
     * @param defaultMessage 默认消息
     * @return 国际化消息
     */
    default String getMessage(String messageCode, Locale locale, String defaultMessage) {
        return getMessage(messageCode, locale, defaultMessage, null);
    }

    /**
     * 获取国际化消息
     *
     * @param messageCode    消息编码
     * @param locale         区域
     * @param defaultMessage 默认消息
     * @param args           参数
     * @return 国际化消息
     */
    String getMessage(String messageCode, Locale locale, String defaultMessage, Object[] args);

    /**
     * 获取国际化消息
     *
     * @param messageCode 消息编码
     * @param locale      区域
     * @param args        参数
     * @return 国际化消息
     */
    default String getMessage(String messageCode, Locale locale, Object[] args) {
        return getMessage(messageCode, locale, null, args);
    }

}